package validator

//传数据进来进行验证工作，完成传入data的验证，即数据验证
import (
	"fmt"
	"github.com/go-playground/locales/zh_Hans_CN"
	unTrans "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	zhTrans "github.com/go-playground/validator/v10/translations/zh"
	"group_-no.2/utils/errmsg"
	"reflect"
)

// Validate 数据验证模块
func Validate(data any) (string, int) {
	validate := validator.New() //实例化
	uni := unTrans.New(zh_Hans_CN.New())
	trans, _ := uni.GetTranslator("zh_Hans_CN") //翻译为中文

	err := zhTrans.RegisterDefaultTranslations(validate, trans) //注册默认翻译，输出错误
	if err != nil {
		fmt.Println("err:", err)
	} //处理错误
	validate.RegisterTagNameFunc(func(field reflect.StructField) string { //标签反射，输出设定的中文而非英文
		label := field.Tag.Get("label")
		return label
	})

	err = validate.Struct(data) //验证结构体，输出错误
	if err != nil {
		for _, v := range err.(validator.ValidationErrors) { //循环处理错误
			return v.Translate(trans), errmsg.ERROR //返回验证结果和报错信息
		}
	}
	return "", errmsg.SUCCESS //成功，返回空字符串
}
